using System;
using System.Threading.Tasks;
using SheLife.Domain.Entities;

namespace SheLife.Domain.Interfaces.Repositories
{
    /// <summary>
    /// 成长目标模板仓储接口
    /// </summary>
    public interface IGrowthGoalTemplateRepository : IRepository<GrowthGoalTemplate>
    {
        /// <summary>
        /// 根据分类获取成长目标模板列表
        /// </summary>
        /// <param name="category">分类</param>
        /// <returns>成长目标模板列表</returns>
        Task<IEnumerable<GrowthGoalTemplate>> GetByCategoryAsync(string category);

        /// <summary>
        /// 根据标签获取成长目标模板列表
        /// </summary>
        /// <param name="tag">标签</param>
        /// <returns>成长目标模板列表</returns>
        Task<IEnumerable<GrowthGoalTemplate>> GetByTagAsync(string tag);

        /// <summary>
        /// 获取热门的成长目标模板列表
        /// </summary>
        /// <param name="count">数量</param>
        /// <returns>成长目标模板列表</returns>
        Task<IEnumerable<GrowthGoalTemplate>> GetPopularAsync(int count);

        /// <summary>
        /// 获取推荐的成长目标模板列表
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="count">数量</param>
        /// <returns>成长目标模板列表</returns>
        Task<IEnumerable<GrowthGoalTemplate>> GetRecommendedAsync(Guid userId, int count);

        /// <summary>
        /// 搜索成长目标模板
        /// </summary>
        /// <param name="keyword">关键词</param>
        /// <returns>成长目标模板列表</returns>
        Task<IEnumerable<GrowthGoalTemplate>> SearchAsync(string keyword);

        /// <summary>
        /// 获取成长目标模板详情
        /// </summary>
        /// <param name="id">模板ID</param>
        /// <returns>成长目标模板详情</returns>
        Task<GrowthGoalTemplate> GetDetailsAsync(Guid id);
    }
}